home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGMISC / PCSSP.LZH / PC-SSP.ZIP / MATINSL.ZIP / DMFGR.FOR < prev    next >
Text File  |  1985-11-29  |  5KB  |  202 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE DMFGR
  5. C
  6. C        PURPOSE
  7. C           FOR A GIVEN M BY N MATRIX THE FOLLOWING CALCULATIONS
  8. C           ARE PERFORMED
  9. C           (1) DETERMINE RANK AND LINEARLY INDEPENDENT ROWS AND
  10. C               COLUMNS (BASIS).
  11. C           (2) FACTORIZE A SUBMATRIX OF MAXIMAL RANK.
  12. C           (3) EXPRESS NON-BASIC ROWS IN TERMS OF BASIC ONES.
  13. C           (4) EXPRESS BASIC VARIABLES IN TERMS OF FREE ONES.
  14. C
  15. C        USAGE
  16. C           CALL DMFGR(A,M,N,EPS,IRANK,IROW,ICOL)
  17. C
  18. C        DESCRIPTION OF PARAMETERS
  19. C           A      - DOUBLE PRECISION GIVEN MATRIX WITH M ROWS
  20. C                    AND N COLUMNS.
  21. C                    ON RETURN A CONTAINS THE TRIANGULAR FACTORS
  22. C                    OF A SUBMATRIX OF MAXIMAL RANK.
  23. C           M      - NUMBER OF ROWS OF MATRIX A.
  24. C           N      - NUMBER OF COLUMNS OF MATRIX A.
  25. C           EPS    - SINGLE PRECISION TESTVALUE FOR ZERO AFFECTED BY
  26. C                    ROUNDOFF NOISE.
  27. C           IRANK  - RESULTANT RANK OF GIVEN MATRIX.
  28. C           IROW   - INTEGER VECTOR OF DIMENSION M CONTAINING THE
  29. C                    SUBSCRIPTS OF BASIC ROWS IN IROW(1),...,IROW(IRANK)
  30. C           ICOL   - INTEGER VECTOR OF DIMENSION N CONTAINING THE
  31. C                    SUBSCRIPTS OF BASIC COLUMNS IN ICOL(1) UP TO
  32. C                    ICOL(IRANK).
  33. C
  34. C        REMARKS
  35. C           THE LEFT HAND TRIANGULAR FACTOR IS NORMALIZED SUCH THAT
  36. C           THE DIAGONAL CONTAINS ALL ONES THUS ALLOWING TO STORE ONLY
  37. C           THE SUBDIAGONAL PART.
  38. C
  39. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  40. C           NONE
  41. C
  42. C        METHOD
  43. C           GAUSSIAN ELIMINATION TECHNIQUE IS USED FOR CALCULATION
  44. C           OF THE TRIANGULAR FACTORS OF A GIVEN MATRIX.
  45. C           COMPLETE PIVOTING IS BUILT IN.
  46. C           IN CASE OF A SINGULAR MATRIX ONLY THE TRIANGULAR FACTORS
  47. C           OF A SUBMATRIX OF MAXIMAL RANK ARE RETAINED.
  48. C           THE REMAINING PARTS OF THE RESULTANT MATRIX GIVE THE
  49. C           DEPENDENCIES OF ROWS AND THE SOLUTION OF THE HOMOGENEOUS
  50. C           MATRIX EQUATION A*X=0.
  51. C
  52. C     ..................................................................
  53. C
  54.       SUBROUTINE DMFGR(A,M,N,EPS,IRANK,IROW,ICOL)
  55. C
  56. C        DIMENSIONED DUMMY VARIABLES
  57.       DIMENSION A(1),IROW(1),ICOL(1)
  58.       DOUBLE PRECISION A,PIV,HOLD,SAVE
  59. C
  60. C        TEST OF SPECIFIED DIMENSIONS
  61.       IF(M)2,2,1
  62.     1 IF(N)2,2,4
  63.     2 IRANK=-1
  64.     3 RETURN
  65. C        RETURN IN CASE OF FORMAL ERRORS
  66. C
  67. C
  68. C        INITIALIZE COLUMN INDEX VECTOR
  69. C        SEARCH FIRST PIVOT ELEMENT
  70.     4 IRANK=0
  71.       PIV=0.D0
  72.       JJ=0
  73.       DO 6 J=1,N
  74.       ICOL(J)=J
  75.       DO 6 I=1,M
  76.       JJ=JJ+1
  77.       HOLD=A(JJ)
  78.       IF(DABS(PIV)-DABS(HOLD))5,6,6
  79.     5 PIV=HOLD
  80.       IR=I
  81.       IC=J
  82.     6 CONTINUE
  83. C
  84. C        INITIALIZE ROW INDEX VECTOR
  85.       DO 7 I=1,M
  86.     7 IROW(I)=I
  87. C
  88. C        SET UP INTERNAL TOLERANCE
  89.       TOL=ABS(EPS*SNGL(PIV))
  90. C
  91. C        INITIALIZE ELIMINATION LOOP
  92.       NM=N*M
  93.       DO 19 NCOL=M,NM,M
  94. C
  95. C        TEST FOR FEASIBILITY OF PIVOT ELEMENT
  96.     8 IF(ABS(SNGL(PIV))-TOL)20,20,9
  97. C
  98. C        UPDATE RANK
  99.     9 IRANK=IRANK+1
  100. C
  101. C        INTERCHANGE ROWS IF NECESSARY
  102.       JJ=IR-IRANK
  103.       IF(JJ)12,12,10
  104.    10 DO 11 J=IRANK,NM,M
  105.       I=J+JJ
  106.       SAVE=A(J)
  107.       A(J)=A(I)
  108.    11 A(I)=SAVE
  109. C
  110. C        UPDATE ROW INDEX VECTOR
  111.       JJ=IROW(IR)
  112.       IROW(IR)=IROW(IRANK)
  113.       IROW(IRANK)=JJ
  114. C
  115. C        INTERCHANGE COLUMNS IF NECESSARY
  116.    12 JJ=(IC-IRANK)*M
  117.       IF(JJ)15,15,13
  118.    13 KK=NCOL
  119.       DO 14 J=1,M
  120.       I=KK+JJ
  121.       SAVE=A(KK)
  122.       A(KK)=A(I)
  123.       KK=KK-1
  124.    14 A(I)=SAVE
  125. C
  126. C        UPDATE COLUMN INDEX VECTOR
  127.       JJ=ICOL(IC)
  128.       ICOL(IC)=ICOL(IRANK)
  129.       ICOL(IRANK)=JJ
  130.    15 KK=IRANK+1
  131.       MM=IRANK-M
  132.       LL=NCOL+MM
  133. C
  134. C        TEST FOR LAST ROW
  135.       IF(MM)16,25,25
  136. C
  137. C        TRANSFORM CURRENT SUBMATRIX AND SEARCH NEXT PIVOT
  138.    16 JJ=LL
  139.       SAVE=PIV
  140.       PIV=0.D0
  141.       DO 19 J=KK,M
  142.       JJ=JJ+1
  143.       HOLD=A(JJ)/SAVE
  144.       A(JJ)=HOLD
  145.       L=J-IRANK
  146. C
  147. C        TEST FOR LAST COLUMN
  148.       IF(IRANK-N)17,19,19
  149.    17 II=JJ
  150.       DO 19 I=KK,N
  151.       II=II+M
  152.       MM=II-L
  153.       A(II)=A(II)-HOLD*A(MM)
  154.       IF(DABS(A(II))-DABS(PIV))19,19,18
  155.    18 PIV=A(II)
  156.       IR=J
  157.       IC=I
  158.    19 CONTINUE
  159. C
  160. C        SET UP MATRIX EXPRESSING ROW DEPENDENCIES
  161.    20 IF(IRANK-1)3,25,21
  162.    21 IR=LL
  163.       DO 24 J=2,IRANK
  164.       II=J-1
  165.       IR=IR-M
  166.       JJ=LL
  167.       DO 23 I=KK,M
  168.       HOLD=0.D0
  169.       JJ=JJ+1
  170.       MM=JJ
  171.       IC=IR
  172.       DO 22 L=1,II
  173.       HOLD=HOLD+A(MM)*A(IC)
  174.       IC=IC-1
  175.    22 MM=MM-M
  176.    23 A(MM)=A(MM)-HOLD
  177.    24 CONTINUE
  178. C
  179. C        TEST FOR COLUMN REGULARITY
  180.    25 IF(N-IRANK)3,3,26
  181. C
  182. C        SET UP MATRIX EXPRESSING BASIC VARIABLES IN TERMS OF FREE
  183. C        PARAMETERS (HOMOGENEOUS SOLUTION).
  184.    26 IR=LL
  185.       KK=LL+M
  186.       DO 30 J=1,IRANK
  187.       DO 29 I=KK,NM,M
  188.       JJ=IR
  189.       LL=I
  190.       HOLD=0.D0
  191.       II=J
  192.    27 II=II-1
  193.       IF(II)29,29,28
  194.    28 HOLD=HOLD-A(JJ)*A(LL)
  195.       JJ=JJ-M
  196.       LL=LL-1
  197.       GOTO 27
  198.    29 A(LL)=(HOLD-A(LL))/A(JJ)
  199.    30 IR=IR-1
  200.       RETURN
  201.       END
  202.